﻿using System;
using System.ComponentModel;
using System.Windows.Forms;
using GSQ.BusinessEntities;
using GSQ.BusinessLogic;

namespace UIapp.Dialogos
{
    public partial class frmSuplidores : Plantillas.frmDialogPlantilla, Interfaces.IPantalla
    {
        public frmSuplidores(SUPLIDORES entity)
        {
            InitializeComponent();
            try
            {
                if (entity == null)
                {
                    this.newEntity = new SUPLIDORES();
                    this.oldEntity = null;
                }
                else
                {
                    this.oldEntity = entity;
                    this.newEntity = new SuplidoresBL().GetById(entity.ID);
                }
                this.BindControls();
            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }

        }

        #region Variables
        public SUPLIDORES oldEntity;
        public SUPLIDORES newEntity;
        bool entityError = false;
        #endregion

        #region Metodos auxiliares
        public void BindControls()
        {
            this.txtId.DataBindings.Add("Text", this.newEntity, "ID");
            this.txtSuplidor.DataBindings.Add("Text", this.newEntity, "SUPLIDOR");
            this.txtDireccion.DataBindings.Add("Text", this.newEntity, "DIRECCION");
            if (this.newEntity.CIUDADES != null)
            {
                this.txtIdCiudad.Text = this.newEntity.ID_CIUDAD.ToString();
                this.txtCiudad.Text = this.newEntity.CIUDADES.CIUDAD;
            }
            this.txtTel1.DataBindings.Add("Text", this.newEntity, "TELEFONO1");
            this.txtTel2.DataBindings.Add("Text", this.newEntity, "TELEFONO2");
            this.txtFax.DataBindings.Add("Text", this.newEntity, "FAX");
            this.txtOtro.DataBindings.Add("Text", this.newEntity, "OTRO");
            this.txtEmail.DataBindings.Add("Text", this.newEntity, "EMAIL");
            this.txtWeb.DataBindings.Add("Text", this.newEntity, "WEB");
            this.txtRnc.DataBindings.Add("Text", this.newEntity, "RNC");
            this.txtVendedor.DataBindings.Add("Text", this.newEntity, "VENDEDOR");
            this.txtCuenta.DataBindings.Add("Text", this.newEntity, "CUENTA");
            if (this.newEntity.MONEDAS != null)
            {
                this.txtIdMoneda.Text = this.newEntity.ID_MONEDA.ToString();
                this.txtMoneda.Text = this.newEntity.MONEDAS.MONEDA;
            }
            this.txtPlazoPago.DataBindings.Add("Text", this.newEntity, "PLAZO_PAGO");
            if (this.newEntity.BANCOS != null)
            {
                this.txtIdBanco.Text = this.newEntity.ID_BANCO.ToString();
                this.txtBanco.Text = this.newEntity.BANCOS.BANCO;
            }
            this.txtObservaciones.DataBindings.Add("Text", this.newEntity, "OBSERVACIONES");
            this.chkActivo.DataBindings.Add("Checked", this.newEntity, "ACTIVO");
            this.lblMontoAdeudado.Text = this.newEntity.MONTO_ADEUDADO.ToString("N2");

        }

        private void Guardar()
        {
            if (newEntity.IsValid())
            {
                if (this.oldEntity == null)
                {
                    this.newEntity.ACTIVO = true;
                    new SuplidoresBL().Insert(this.newEntity);
                }
                else
                {
                    new SuplidoresBL().Update(this.newEntity, this.oldEntity);
                    this.oldEntity = this.newEntity;
                }
                this.entityError = false;
            }
            else
            {
                this.entityError = true;
                Comun.ShowMessage(newEntity);
            }
        }

        private bool BuscarCiudad()
        {
            decimal id = 0;
            CIUDADES ciudad;
            if (decimal.TryParse(this.txtIdCiudad.Text.Trim(), out id))
            {
                if (this.newEntity.ID_CIUDAD == 0 || this.newEntity.ID_CIUDAD != id)
                {
                    ciudad = new CiudadesBL().GetById(id);
                    if (ciudad != null && ciudad.ACTIVO)
                    {
                        this.newEntity.ID_CIUDAD = ciudad.ID;
                        this.txtCiudad.Text = ciudad.CIUDAD;
                        this.newEntity.CIUDADES = ciudad;
                        return true;
                    }
                    else
                    {
                        Comun.ShowInMainMessage("No existen datos con este código");
                        this.newEntity.ID_CIUDAD = 0;
                        this.newEntity.CIUDADES = null;
                        this.txtCiudad.Clear();
                        this.txtIdCiudad.Focus();
                        return false;
                    }
                }
                return true;
            }
            this.newEntity.ID_CIUDAD = 0;
            this.newEntity.CIUDADES = null;
            this.txtCiudad.Clear();
            Comun.ShowInMainMessage("Solo números son permitidos en este campo");
            return false;
        }

        private bool BuscarBanco()
        {
            decimal id = 0;
            BANCOS banco;
            if (decimal.TryParse(this.txtIdBanco.Text.Trim(), out id))
            {
                if (this.newEntity.ID_BANCO == 0 || this.newEntity.ID_BANCO != id)
                {
                    banco = new BancosBL().GetById(id);
                    if (banco != null && banco.ACTIVO)
                    {
                        this.newEntity.ID_BANCO = banco.ID;
                        this.txtBanco.Text = banco.BANCO;
                        this.newEntity.BANCOS = banco;
                        return true;
                    }
                    else
                    {
                        this.newEntity.ID_BANCO = 0;
                        this.txtBanco.Clear();
                        this.txtIdBanco.Focus();
                        this.newEntity.BANCOS = null;
                        Comun.ShowInMainMessage("No existen datos con este código");
                        return false;
                    }
                }
                return true;
            }
            this.newEntity.ID_BANCO = 0;
            this.txtBanco.Clear();
            this.txtIdBanco.Focus();
            this.newEntity.BANCOS = null;
            Comun.ShowInMainMessage("Solo números son permitidos en este campo");
            return false;
        }

        private bool BuscarMoneda()
        {
            decimal id = 0;
            MONEDAS moneda;
            if (decimal.TryParse(this.txtIdMoneda.Text.Trim(), out id))
            {
                if (this.newEntity.ID_MONEDA == 0 || this.newEntity.ID_MONEDA != id)
                {
                    moneda = new MonedasBL().GetById(id);
                    if (moneda != null && moneda.ACTIVO)
                    {
                        this.newEntity.ID_MONEDA = moneda.ID;
                        this.txtMoneda.Text = moneda.MONEDA;
                        this.newEntity.MONEDAS = moneda;
                        return true;
                    }
                    else
                    {
                        this.newEntity.ID_MONEDA = 0;
                        this.newEntity.MONEDAS = null;
                        this.txtMoneda.Clear();
                        this.txtIdMoneda.Focus();
                        Comun.ShowInMainMessage("No existen datos con este código");
                        return false;
                    }
                }
                return true;
            }
            this.newEntity.ID_MONEDA = 0;
            this.newEntity.MONEDAS = null;
            this.txtMoneda.Clear();
            Comun.ShowInMainMessage("Solo números son permitidos en este campo");
            return false;
        }


        #endregion

        #region Tratamiento de eventos

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                this.backgroundWorker.RunWorkerAsync();
                Comun.ShowLoadingFRM();
            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            this.Guardar();
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            Comun.CloseLoadingFRM();
            if (e.Error != null)
                Comun.ShowMessage(e.Error);
            else if (this.entityError)
                return;
            else
            {
                Comun.ShowInMainMessage("Datos guardados correctamente...");
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.Close();
            }
        }

        private void txtIdCiudad_Validating(object sender, CancelEventArgs e)
        {
            try
            {
                if (this.txtIdCiudad.Text.Length > 0)
                {
                    if (!this.BuscarCiudad())
                    {
                        this.txtCiudad.Clear();
                        this.txtIdCiudad.Focus();
                        e.Cancel = true;
                    }
                }
                else
                {
                    this.newEntity.ID_CIUDAD = 0;
                    this.txtCiudad.Clear();
                }


            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        private void txtIdMoneda_Validating(object sender, CancelEventArgs e)
        {
            try
            {
                if (this.txtIdMoneda.Text.Length > 0)
                {
                    if (!this.BuscarMoneda())
                    {
                        this.txtMoneda.Clear();
                        this.txtIdMoneda.Focus();
                        e.Cancel = true;
                    }
                }
                else
                {
                    this.newEntity.ID_MONEDA = 0;
                    this.txtMoneda.Clear();
                }


            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        private void txtIdBanco_Validating(object sender, CancelEventArgs e)
        {
            try
            {
                if (this.txtIdBanco.Text.Length > 0)
                {
                    if (!this.BuscarBanco())
                    {
                        this.txtBanco.Clear();
                        this.txtIdBanco.Focus();
                        e.Cancel = true;
                    }
                }
                else
                {
                    this.newEntity.ID_BANCO = 0;
                    this.txtBanco.Clear();
                }

            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        private void txtIdMoneda_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F9)
            {
                Busquedas.frmCatalogos frm = new Busquedas.frmCatalogos(Comun.Catalogos.Monedas);
                frm.ShowDialog();
                if (frm.DialogResult == System.Windows.Forms.DialogResult.OK)
                {
                    this.newEntity.MONEDAS = null;
                    this.newEntity.ID_MONEDA = ((MONEDAS)frm.radGridView.CurrentRow.DataBoundItem).ID;
                    this.txtIdMoneda.Text = ((MONEDAS)frm.radGridView.CurrentRow.DataBoundItem).ID.ToString();
                    this.txtMoneda.Text = ((MONEDAS)frm.radGridView.CurrentRow.DataBoundItem).MONEDA;
                    this.newEntity.MONEDAS = ((MONEDAS)frm.radGridView.CurrentRow.DataBoundItem);
                }
            }
        }

        private void txtIdBanco_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F9)
            {
                Busquedas.frmCatalogos frm = new Busquedas.frmCatalogos(Comun.Catalogos.Bancos);
                frm.ShowDialog();
                if (frm.DialogResult == System.Windows.Forms.DialogResult.OK)
                {
                    this.newEntity.BANCOS = null;
                    this.newEntity.ID_BANCO = ((BANCOS)frm.radGridView.CurrentRow.DataBoundItem).ID;
                    this.txtIdBanco.Text = ((BANCOS)frm.radGridView.CurrentRow.DataBoundItem).ID.ToString();
                    this.txtBanco.Text = ((BANCOS)frm.radGridView.CurrentRow.DataBoundItem).BANCO;
                    this.newEntity.BANCOS = ((BANCOS)frm.radGridView.CurrentRow.DataBoundItem);
                }
            }
        }

        private void txtIdCiudad_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F9)
            {
                Busquedas.frmCatalogos frm = new Busquedas.frmCatalogos(Comun.Catalogos.Ciudades);
                frm.ShowDialog();
                if (frm.DialogResult == System.Windows.Forms.DialogResult.OK)
                {
                    this.newEntity.CIUDADES = null;
                    this.newEntity.ID_CIUDAD = ((CIUDADES)frm.radGridView.CurrentRow.DataBoundItem).ID;
                    this.txtIdCiudad.Text = ((CIUDADES)frm.radGridView.CurrentRow.DataBoundItem).ID.ToString();
                    this.txtCiudad.Text = ((CIUDADES)frm.radGridView.CurrentRow.DataBoundItem).CIUDAD;
                    this.newEntity.CIUDADES = ((CIUDADES)frm.radGridView.CurrentRow.DataBoundItem);
                }
            }
        }

        private void txtEmail_Validating(object sender, CancelEventArgs e)
        {
            if (this.txtEmail.Text.Trim() != string.Empty)
            {
                if (!Comun.ValidarEmail(this.txtEmail.Text.Trim()))
                {
                    Comun.ShowInMainMessage("Formaro e-mail no valido. (Ej. algo@servidor.com)");
                    this.txtEmail.Focus();
                    e.Cancel = true;
                }
            }
        }

        private void txtRnc_Validating(object sender, CancelEventArgs e)
        {
            if (this.txtRnc.Text.Trim() != string.Empty)
            {
                if (this.txtRnc.Text.Trim() == "0")
                {
                    this.txtRnc.Text = this.txtRnc.Text.Trim();
                    return;
                }

                if (this.txtRnc.Text.Trim().Length == 9)
                {
                    if (!Comun.ValidaRNC(this.txtRnc.Text.Trim()))
                    {
                        Comun.ShowInMainMessage("RNC no valido.");
                        this.txtRnc.Focus();
                        e.Cancel = true;
                    }
                }
                else if (this.txtRnc.Text.Trim().Length == 11)
                {
                    if (!Comun.ValidaCedula(this.txtRnc.Text.Trim()))
                    {
                        Comun.ShowInMainMessage("CEDULA no valida.");
                        this.txtRnc.Focus();
                        e.Cancel = true;
                    }
                }
                else
                {
                    Comun.ShowInMainMessage("No valido se requieren 9 ó 11 caracteres numericos");
                    this.txtRnc.Focus();
                    e.Cancel = true;
                }
            }
        }
        #endregion

        #region Implementacion IPantalla
        public int ComandosSoportados
        {
            get { return 0; }
        }

        public void Nuevo()
        {
            throw new NotImplementedException();
        }

        public void Modificar()
        {
            throw new NotImplementedException();
        }

        public void Eliminar()
        {
            throw new NotImplementedException();
        }

        public void Refrescar()
        {
            throw new NotImplementedException();
        }

        public void Buscar()
        {
            throw new NotImplementedException();
        }

        public void AgregarProducto(Controles.TransferEntity tranferEntity)
        {
            throw new NotImplementedException();
        }
        #endregion
    }
}
